home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
011-020
/
amok11
/
r.o.m.
/
m2sources
/
main.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
13KB
|
386 lines
MODULE Main;
(*Created: 3.3.88
Changed: 8.8.88 by
Stefan Salewski
Stolper Weg 3
2160 Stade West-Germany
Tel: 04141/61130
Note: compiled with AMIGA Modula-2 System by AMSoft, Version from 5.5.88
*)
FROM Calcu IMPORT Tas;
FROM Graph IMPORT Graf;
FROM VarIO IMPORT VarInOut;
FROM MyInfo IMPORT ShowInfo;
FROM SYSTEM IMPORT ADR,ADDRESS,LONGSET,INLINE;
FROM Arts IMPORT TermProcedure,Assert,Error;
FROM Intuition IMPORT WindowPtr,ItemAddress,Gadget,IDCMPFlags,IDCMPFlagSet,
Image,GadgetFlags,GadgetFlagSet,ActivationFlags,ActivationFlagSet,
boolGadget,NewWindow,OpenWindow,CloseWindow,GadgetPtr,IntuiMessagePtr,
WindowFlags,WindowFlagSet,ScreenFlags,ScreenFlagSet;
FROM Exec IMPORT WaitPort,GetMsg,ReplyMsg,CopyMem,MemReqs,MemReqSet,
AllocMem,FreeMem,AvailMem;
CONST
MinChip=50*1024; (* zum startem des Programmes benoetigter Speicher *)
MinRam=60*1024;
Height=32;
Width=84;
TopEdge=0;
LeftEdge=0;
BTop=12;
BLeft=15;
WindowWidth=3*BLeft+2*Width;
WindowHeight=BTop+3*(BTop DIV 2)+3*Height;
ImSize=400;
VAR
gadgets:ARRAY[0..4] OF Gadget;
images:ARRAY[0..4] OF Image;
newImAdr:ARRAY[0..4] OF ADDRESS;
newWindow:NewWindow;
windowPtr:WindowPtr;
msgPtr:IntuiMessagePtr;
msgadr:GadgetPtr;
ende:BOOLEAN;
n:INTEGER;
code:CARDINAL;
PROCEDURE GrafI; (*$E- Bild fuer GrafikGadget *)
BEGIN
INLINE(
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
0E000H,00000H,00000H,08000H,00000H,07000H,
0E000H,00000H,00000H,08000H,00070H,07000H,
0E000H,00000H,00000H,08000H,00180H,07000H,
0E000H,00000H,00000H,08000H,00200H,07000H,
0E000H,003FFH,00000H,08000H,00400H,07000H,
0E000H,01C00H,0C000H,08000H,00800H,07000H,
0E000H,02000H,03000H,08000H,01000H,07000H,
0E000H,0C000H,00C00H,08000H,02000H,07000H,
0E001H,00000H,00200H,08000H,04000H,07000H,
0E002H,00000H,00100H,08000H,08000H,07000H,
0E004H,00000H,00080H,08000H,08000H,07000H,
0E008H,00000H,00040H,08001H,00000H,07000H,
0EFFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,07000H,
0E020H,00000H,00010H,08002H,00000H,07000H,
0E040H,00000H,00008H,08004H,00000H,07000H,
0E040H,00000H,00004H,08008H,00000H,07000H,
0E080H,00000H,00002H,08008H,00000H,07000H,
0E080H,00000H,00001H,08010H,00000H,07000H,
0E100H,00000H,00000H,08010H,00000H,07000H,
0E100H,00000H,00000H,0C020H,00000H,07000H,
0E000H,00000H,00000H,0E040H,00000H,07000H,
0E000H,00000H,00000H,0B180H,00000H,07000H,
0E000H,00000H,00000H,08E00H,00000H,07000H,
0E000H,00000H,00000H,08000H,00000H,07000H,
0E000H,00000H,00000H,08000H,00000H,07000H,
0E000H,00000H,00000H,08000H,00000H,07000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H
)
END GrafI;
PROCEDURE TasI; (*$E- Bild fuer CalculatorGadget *)
BEGIN
INLINE(
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E03FH,0000FH,08000H,00E00H,01F00H,07000H,
0E041H,08010H,0C000H,01E00H,03180H,07000H,
0E001H,08600H,06230H,03600H,00180H,07000H,
0E001H,08600H,0C160H,0667FH,00300H,07000H,
0E007H,03FC1H,08FFCH,0C600H,00600H,07000H,
0E001H,08603H,001A1H,08600H,00600H,07000H,
0E001H,08606H,02311H,0FF7FH,00000H,07000H,
0E041H,0800CH,06000H,00600H,00600H,07000H,
0E03EH,0001FH,0E000H,00F00H,00600H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H
)
END TasI;
PROCEDURE VarInOutI; (*$E- Bild fuer VarInOutGadget *)
BEGIN
INLINE(
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E1FFH,00000H,0F807H,0FE7FH,01F80H,07000H,
0E0C1H,00001H,00C06H,00CC1H,0A0C0H,07000H,
0E0C0H,00000H,00604H,01841H,000C0H,07000H,
0E0C4H,031FCH,00C00H,0303EH,000C0H,07000H,
0E0FCH,03000H,01800H,06041H,00380H,07000H,
0E0C4H,00000H,03000H,060C1H,080C0H,07000H,
0E0C0H,001FCH,06200H,060C1H,080C0H,07000H,
0E0C1H,03000H,0C660H,06041H,020C0H,07000H,
0E1FFH,03001H,0FE60H,0603EH,01F00H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00003H,0F003H,000E0H,0C1E0H,07000H,
0E000H,00004H,01807H,001E1H,0C200H,07000H,
0E000H,00000H,0180FH,00363H,0C600H,07000H,
0E778H,0C7F0H,01803H,00660H,0C600H,07000H,
0E38CH,0C000H,07003H,00C60H,0C6F8H,07000H,
0E30CH,00000H,01803H,01860H,0C70CH,07000H,
0E30CH,007F0H,01803H,01FF0H,0C60CH,07000H,
0E30CH,0C004H,01983H,00060H,0C318H,07000H,
0E3F8H,0C003H,0E18FH,0C0F3H,0F1F0H,07000H,
0E300H,00000H,00000H,00000H,00000H,07000H,
0E300H,00000H,00000H,00000H,00000H,07000H,
0E780H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H
)
END VarInOutI;
PROCEDURE EndeI; (*$E- Bild fuer EndeGadget *)
BEGIN
INLINE(
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00FF8H,00003H,08000H,00000H,07000H,
0E000H,00608H,00001H,08000H,00000H,07000H,
0E000H,00600H,00001H,08000H,00000H,07000H,
0E000H,00623H,07C3DH,087E0H,00000H,07000H,
0E000H,007E1H,08663H,08C30H,00000H,07000H,
0E000H,00621H,08661H,08FF0H,00000H,07000H,
0E000H,00601H,08661H,08C00H,00000H,07000H,
0E000H,00609H,08661H,08C10H,00000H,07000H,
0E000H,00FFBH,0CF3EH,0C7E0H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
0E000H,00000H,00000H,00000H,00000H,07000H,
07000H,00000H,00000H,00000H,00000H,0E000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H
)
END EndeI;
PROCEDURE InfoI; (*$E- Bild fuer InfoGadget *)
BEGIN
INLINE(
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
07000H,00000H,07F00H,00000H,00000H,0E000H,
0E000H,00001H,088C0H,07800H,00000H,07000H,
0E000H,00002H,02020H,0CC00H,00000H,07000H,
0E000H,00002H,08120H,00C3FH,08000H,07000H,
0E000H,00002H,02020H,01810H,07F00H,07000H,
0E000H,04001H,080F0H,03010H,00100H,07000H,
0E000H,04002H,07F00H,00010H,00100H,07000H,
0E000H,06002H,00800H,03010H,00100H,07000H,
0E000H,06018H,03000H,00010H,00100H,07000H,
0E000H,02020H,02000H,0003FH,0FF00H,07000H,
0E000H,03070H,02000H,00000H,00000H,07000H,
0E000H,0304CH,0100FH,081FFH,0FF00H,07000H,
0E000H,01042H,00874H,00100H,00100H,07000H,
0E000H,01841H,087C2H,0A900H,00100H,07000H,
0E000H,01840H,06D0FH,0FFFFH,0FFF0H,07000H,
0E000H,01840H,03000H,04000H,00200H,07000H,
0E000H,00C40H,03FFCH,04000H,00200H,07000H,
0E000H,00C40H,00004H,04000H,00200H,07000H,
0E000H,00C7FH,0FFE4H,04000H,00200H,07000H,
0E000H,00600H,00024H,04000H,00200H,07000H,
0E000H,007FFH,0FC24H,04000H,00200H,07000H,
0E000H,00100H,01024H,04000H,00200H,07000H,
0E000H,00100H,01024H,04000H,00200H,07000H,
0E000H,00100H,01024H,04000H,00200H,07000H,
0E000H,00100H,01024H,04000H,00200H,07000H,
0E000H,00100H,01027H,0C000H,00200H,07000H,
0E000H,00100H,0103FH,0FC00H,00200H,07000H,
07000H,00100H,01000H,04000H,00200H,0E000H,
03FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,0C000H,
00FFFH,0FFFFH,0FFFFH,0FFFFH,0FFFFH,00000H
)
END InfoI;
PROCEDURE Cleanup;
VAR i:CARDINAL;
BEGIN
IF windowPtr#NIL THEN
CloseWindow(windowPtr);
windowPtr:=NIL
END;
FOR i:=0 TO 4 DO
IF newImAdr[i]#NIL THEN
FreeMem(newImAdr[i],ImSize)
END
END
END Cleanup;
PROCEDURE InitImage(VAR im:Image;VAR newImAdr:ADDRESS;dates:ADDRESS);
BEGIN
WITH im DO
leftEdge:=0;
topEdge:=0;
width:=Width;
height:=Height;
depth:=1;
IF (dates+ImSize) >= 080000H THEN
newImAdr:=AllocMem(ImSize,MemReqSet{chip});
CopyMem(dates,newImAdr,ImSize);
imageData:=newImAdr
ELSE
newImAdr:=NIL;
imageData:=dates
END;
planePick:=1;
planeOnOff:=2;
nextImage:=NIL;
END;
END InitImage;
PROCEDURE InitGadget(VAR gadg:Gadget;id,leftE,topE:INTEGER;imAdr,
next:ADDRESS);
BEGIN
WITH gadg DO
nextGadget:=GadgetPtr(next);
leftEdge:=leftE;
topEdge:=topE;
width:=Width;
height:=Height;
flags:=GadgetFlagSet{gadgImage};
activation:=ActivationFlagSet{gadgImmediate};
gadgetType:=boolGadget;
gadgetRender:=imAdr;
selectRender:=NIL;
gadgetText:=NIL;
mutualExclude:=LONGSET{};
specialInfo:=NIL;
gadgetID:=id;
userData:=NIL;
END;
END InitGadget;
PROCEDURE Ende;
BEGIN
ende:=TRUE;
END Ende;
BEGIN
TermProcedure(Cleanup);
IF (AvailMem(MemReqSet{chip})<MinChip) OR (AvailMem(MemReqSet{})<MinRam)
THEN Error(ADR("Sorry. There isn't enough Memory"),
ADR('free for starting R.o.M.'))
END;
WITH newWindow DO
leftEdge:=LeftEdge;
topEdge:=TopEdge;
width:=WindowWidth;
height:=WindowHeight;
detailPen:=0;
blockPen:=1;
idcmpFlags:=IDCMPFlagSet{vanillaKey,gadgetDown,reqClear};
flags:=WindowFlagSet{activate,windowDrag,windowDepth,
noCareRefresh,simpleRefresh};
type:=ScreenFlagSet{wbenchScreen};
firstGadget:=ADR(gadgets[0]);
checkMark:=NIL;
title:=ADR("R.o.M. V1.0");
screen:=NIL;
bitMap:=NIL;
minWidth:=WindowWidth;
minHeight:=WindowHeight;
maxWidth:=WindowWidth;
maxHeight:=WindowHeight;
END;
InitImage(images[0],newImAdr[0],ADR(GrafI));
InitImage(images[1],newImAdr[1],ADR(TasI));
InitImage(images[2],newImAdr[2],ADR(VarInOutI));
InitImage(images[3],newImAdr[3],ADR(EndeI));
InitImage(images[4],newImAdr[4],ADR(InfoI));
InitGadget(gadgets[0],0,BLeft,BTop,ADR(images[0]),ADR(gadgets[1]));
InitGadget(gadgets[1],1,2*BLeft+Width,BTop,ADR(images[1]),ADR(gadgets[2]));
InitGadget(gadgets[2],2,3*(BLeft DIV 2)+Width DIV 2,3*(BTop DIV 2)+Height,
ADR(images[2]),ADR(gadgets[3]));
InitGadget(gadgets[3],3,BLeft,2*BTop+2*Height,ADR(images[3]),ADR(gadgets[4]));
InitGadget(gadgets[4],4,2*BLeft+Width,2*BTop+2*Height,ADR(images[4]),NIL);
ende:=FALSE;
windowPtr:=NIL;
REPEAT
IF windowPtr=NIL THEN
windowPtr:=OpenWindow(newWindow)
END;
Assert(windowPtr#NIL,ADR('Cannot Open Window'));
WaitPort(windowPtr^.userPort);
msgPtr:=GetMsg(windowPtr^.userPort);
IF msgPtr#NIL THEN
IF msgPtr^.class=IDCMPFlagSet{vanillaKey} THEN
code:=msgPtr^.code;
ELSE
code:=0;
msgadr:=msgPtr^.iAddress;
n:=msgadr^.gadgetID;
END;
ReplyMsg(msgPtr);
IF code#0 THEN
CASE CAP(CHAR(code)) OF
'C','T','R':n:=1|
'G','F':n:=0|
'E','Q','X':n:=3|
'V':n:=2|
ELSE
n:=5
END;
END;
IF n<4 THEN
CloseWindow(windowPtr);
windowPtr:=NIL
END;
CASE n OF
0:Graf|
1:Tas|
2:VarInOut|
3:Ende|
4:(*windowPtr:=OpenWindow(newWindow);*)
ShowInfo(windowPtr);
WaitPort(windowPtr^.userPort);
msgPtr:=GetMsg(windowPtr^.userPort);
IF msgPtr#NIL THEN
ReplyMsg(msgPtr)
END|
5:(* Do Nothing *)
ELSE
Error(ADR('Main'),ADR('UnknownMessage'))
END
END;
UNTIL ende;
END Main.